module Primary = struct
  module Package_ = struct
    module Primary = struct
      type t = {
        ecosystem : Githubc2_components_security_advisory_ecosystems.t;
        name : string option; [@default None]
      }
      [@@deriving yojson { strict = false; meta = true }, show, eq]
    end

    include Json_schema.Additional_properties.Make (Primary) (Json_schema.Obj)
  end

  module Vulnerable_functions = struct
    type t = string list option [@@deriving yojson { strict = false; meta = true }, show, eq]
  end

  type t = {
    first_patched_version : string option; [@default None]
    package : Package_.t option; [@default None]
    vulnerable_functions : Vulnerable_functions.t option; [@default None]
    vulnerable_version_range : string option; [@default None]
  }
  [@@deriving yojson { strict = false; meta = true }, show, eq]
end

include Json_schema.Additional_properties.Make (Primary) (Json_schema.Obj)
